#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
  pid_t pid;
  pid = fork();

  if(pid < 0) {
    fprintf(stderr, "Fork failed\n");
    exit(EXIT_FAILURE);
  } else if(pid == 0) {
    printf("Child process (PID: %d) will execute 'ls -l'\n", getpid());

    //使用execl替换当前进程为ls命令
    execl("/bin/ls", "ls", "-1", NULL);
    char *const myargv[] = {
      (char*)"ls",
      (char*)"-a",
      (char*)"-i",
      (char*)"-n",
      (char*)"-l",
      NULL
    };

    char *const myargv[] = {(char*)"pwd", NULL};
    execv("/usr/bin/pwd", myargv);
    
    //如果execl执行成功，下面的代码就不会执行
    //如果执行到这里，说明execv失败了
  }
  return 0;
}
//int main(int argc, char *argv[])
//{
//  pid_t pid;//用于存储进程ID
//  pid = fork();
//
//  if(pid < 0) {
//    fprintf(stderr, "Fork failed\n");//stderr文件描述符（错误）
//    exit(EXIT_FAILURE);//通常表示非0值
//
//  } else if(pid == 0) {//子进程
//    //在子进程中，尝试使用execv函数执行一个新的程序，该程序的名称和参数从命令行参数中获取。
//    char **myargv = &argv[1];//第二个参数：包含了传递给新程序的参数
//    execv(myargv[0], myargv);//第一个参数：要执行的程序的路径
//    
//    if(execv(myargv[0], myargv) == -1) {
//      fprintf(stderr, "Execv failed\n");
//      exit(EXIT_FAILURE);
//    }
//  }
//  return 0;
//}
